CMSTP 如何绕过 UAC
CMSTP 绕过 UAC:方法1,通过INF RunPreSetupCommandSection 实现绕过UAC。方法2,通过COM接口直接利用UAC绕过。
UAC 是微软在 Windows Vista 以后版本引入的一种安全机制,通过 UAC,应用程序和任务可始终在非管理员帐户的安全上下文中运行,除非管理员特别授予管理员级别的系统访问权限。UAC 可以阻止未经授权的应用程序自动进行安装,并防止无意中更改系统设置。
CMSTP 是一个旧的远程访问配置工具,且附带有一个名为 Config Manager Admin Kit 的配置向导。这个向导还会弹出一个 INF 配置文件,帮助攻击者实施攻击。
CMSTP 绕过 UAC
方法1:通过INF RunPreSetupCommandSection 实现绕过UAC
正如Odvar Moe在他的研究中发现的那样,事实证明INF文件中的RegisterOCXSection并不是唯一容易被武器化的部分。查看由Connection Manager Admin Kit生成的另一个INF文件,可以插入任意二进制文件,以便在RunPreSetupCommandSection下执行。在本例中,我们生成一个shell,然后清除cmstp可执行文件。
需要一些新选项,确保在弹出的对话框中选中了“All Users/所有用户”,然后单击OK。
然后就有了shell。请注意,与前面的方法不同,可执行文件以这种方式运行,在不通知用户的情况下提升了它们的安全上下文,从而绕过UAC。我们将在方法3中研究一种更隐蔽的方法来实现这一点,该方法不涉及弹出窗口。
注意Sysmon 12和Sysmon 13注册表value add和value set事件:
Dllhost.exe在Sysmon 12中创建对象cmmgr32.exe,然后在随后的Sysmon 13中将ProfileInstallPath值设置为C:ProgramDataMicrosoftNetworkConnectionsCm。
让我们看看实际上产生cmd.exe的Sysmon 1事件:
在ParentCommand行字段中看到,Dllhost.exe使用带有某种GUID的ProcessID选项。为了理解GUID在那里做什么,将重新运行,但这次使用修改的Sysmon配置,允许我们获得Sysmon事件10s进程访问。
为了限制事件10的收集孔径,避免系统陷入停顿,我们将遵循Tim Burrell的做法,在这里设置Sysmon,以便我们只提取那些请求高度特权级别的进程访问的Sysmon 10事件,或者在CallTrack中包含一个“unknown”字符串:
需要让Sysmon知道通过运行以下命令来使用更新后的配置:
sysmon -c <modified_config.xml>
重新运行时,会看到另外几个Sysmon 10事件。其中特别有趣的是,Dllhost.exe访问TargetImage cmd.exe。
注意CallTrack数据。其中一个被调用的DLL是cmlua.dll,[@hFireF0X]将它作为包含一个名为CMLUAUTIL的自动提升的COM接口调用。当使用方法2时,将再次看到CMLUAUTIL。
方法2:通过COM接口直接利用UAC绕过
正如@hFireF0X在他的tweet中所说的,cmlua.dll分别通过cmlua.dll和cmstplua.dll引用自动提升COM接口CMLUAUTIL和CMSTPLUA。在他的UAC绕过项目UACME(https:/github.com/hfire0x/UACME)中,列举了几个实现绕过的方法,但是#41包含了一个PoC,可以执行我们在方法1中看到的相同的攻击,除了不处理cmstp.exe,它是弹出对话框,并且依赖DLL与COM接口进行对接,直接与它们进行对接。
如果使用这个方法,对Sysmon可见性的潜在影响是什么?
要在2018年7月开始执行这种UACME驱动的攻击,我们需要在“Compiled”和“Source”目录仍然有效的情况下获取UACME REPO的前一次提交(他已经删除了我们所需的可执行文件,因此需要使用2018年5月或6月的提交)。在Compiled目录下,让我们运行“Akagi32.exe 41”。
如果我们回到方法2中所分析的Sysmon 10事件,其中Dllhost.exe访问cmd.exe并查看CallTrack,则没有提到cmlua.dll。还请注意,没有Sysmon 12或13事件。这表明查找cmlua.dll或注册表adds / mods 可能很难:
让我们重新访问Sysmon 1事件,其中dllhost.exe产生cmd.exe。事实证明,我们在ParentCommandLine字段中看到的GUID实际上是我们连接到的COM对象的类ID,在本例中是支持自动提升的CMSTPLUA。
然后,检测方法1和2的一个潜在的高级方法是在ParentCommand行中对dllhost.exe以及CMSTPLUA的GUID发出警报:
Sysmon 1,其中ParentCommandLine包含dllhost.exe并包含CMSTPLUA COM对象的GUID(3E5FC7F9-9A51-4367-9063-A120244FBEC7)